sysroot: Drop an fsync for origin file when writing deployments
authorColin Walters <walters@verbum.org>
Wed, 14 Sep 2016 01:09:48 +0000 (21:09 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 14 Sep 2016 10:26:39 +0000 (10:26 +0000)
More fsync pruning.  Since we have a public API for writing the origin
file and it did a fsync before, let's preserve that.  But when writing
deployments as part of a full transaction, we rely on the global
`syncfs()`, so add an internal function for origin file writing that
doesn't.

Closes: #509
Approved by: giuseppe

src/libostree/ostree-sysroot-deploy.c

index 8f0ff733bd97342bcd98147a69f94de75dbda8cc..a3c1401db70224ca39f0f24233c0392e391b3999 100644 (file)
@@ -894,24 +894,13 @@ merge_configuration (OstreeSysroot         *sysroot,
   return ret;
 }
 
-/**
- * ostree_sysroot_write_origin_file:
- * @sysroot: System root
- * @deployment: Deployment
- * @new_origin: (allow-none): Origin content
- * @cancellable: Cancellable
- * @error: Error
- *
- * Immediately replace the origin file of the referenced @deployment
- * with the contents of @new_origin.  If @new_origin is %NULL,
- * this function will write the current origin of @deployment.
- */
-gboolean
-ostree_sysroot_write_origin_file (OstreeSysroot         *sysroot,
-                                  OstreeDeployment      *deployment,
-                                  GKeyFile              *new_origin,
-                                  GCancellable          *cancellable,
-                                  GError               **error)
+static gboolean
+write_origin_file_internal (OstreeSysroot         *sysroot,
+                            OstreeDeployment      *deployment,
+                            GKeyFile              *new_origin,
+                            GLnxFileReplaceFlags   flags,
+                            GCancellable          *cancellable,
+                            GError               **error)
 {
   GKeyFile *origin =
     new_origin ? new_origin : ostree_deployment_get_origin (deployment);
@@ -933,7 +922,7 @@ ostree_sysroot_write_origin_file (OstreeSysroot         *sysroot,
 
       if (!glnx_file_replace_contents_at (sysroot->sysroot_fd,
                                           origin_path, (guint8*)contents, len,
-                                          GLNX_FILE_REPLACE_DATASYNC_NEW,
+                                          flags,
                                           cancellable, error))
         return FALSE;
     }
@@ -941,6 +930,30 @@ ostree_sysroot_write_origin_file (OstreeSysroot         *sysroot,
   return TRUE;
 }
 
+/**
+ * ostree_sysroot_write_origin_file:
+ * @sysroot: System root
+ * @deployment: Deployment
+ * @new_origin: (allow-none): Origin content
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * Immediately replace the origin file of the referenced @deployment
+ * with the contents of @new_origin.  If @new_origin is %NULL,
+ * this function will write the current origin of @deployment.
+ */
+gboolean
+ostree_sysroot_write_origin_file (OstreeSysroot         *sysroot,
+                                  OstreeDeployment      *deployment,
+                                  GKeyFile              *new_origin,
+                                  GCancellable          *cancellable,
+                                  GError               **error)
+{
+  return write_origin_file_internal (sysroot, deployment, new_origin,
+                                     GLNX_FILE_REPLACE_DATASYNC_NEW,
+                                     cancellable, error);
+}
+
 static gboolean
 get_kernel_from_tree (int             deployment_dfd,
                       int            *out_boot_dfd,
@@ -2152,8 +2165,12 @@ ostree_sysroot_deploy_tree (OstreeSysroot     *self,
           goto out;
       }
 
-    if (!ostree_sysroot_write_origin_file (self, new_deployment, NULL,
-                                           cancellable, error))
+    /* Don't fsync here, as we assume that's all done in
+     * ostree_sysroot_write_deployments().
+     */
+    if (!write_origin_file_internal (self, new_deployment, NULL,
+                                     GLNX_FILE_REPLACE_NODATASYNC,
+                                     cancellable, error))
       {
         g_prefix_error (error, "Writing out origin file: ");
         goto out;